package collection;
import java.util.Collection;
import java.util.ArrayList;
import java.util.Iterator;
/**迭代器的演示*/
public class IteratorDemo {
    public static void main(String[] args) {
        Collection<String> c=new ArrayList<>();
        c.add("one");
        c.add("#");
        c.add("two");
        c.add("#");
        c.add("three");
        c.add("#");
        c.add("four");
        c.add("#");
        c.add("five");
        System.out.println(c);

        /*
          迭代器的常用方法:
          1)boolean hasNext():-------------问(必要操作)
            询问集合是否还有"下一个"元素可供迭代
            注意:迭代器默认开始位置为集合的第1个元素之前
                无论调用了多少次hasNext()，迭代器的位置都不会改变
          2)E next():----------------------取(必要操作)
            迭代器向后移动一个位置并将该位置的元素取出
          3)void remove():-----------------删除（非必要操作）
          删除next()所获取元素，迭代器会自动将当前位置的元素删除
         */
        Iterator<String> i=c.iterator();//获取c集合的迭代器
        //迭代器遍历集合
        while(i.hasNext()){       //问：有没有下一个元素，起始位置在第一个元素之前，若为true则进入循环
            String s=i.next();    //取：移动到下一个元素，并获取下一个元素
            System.out.println(s);//输出当前元素
            if("#".equals(s)){    //判断当前元素是否为#，将“#”放在前面，避免空指针异常（s可能为null）
                //c.remove(s);    //并发运行异常，迭代器遍历过程中不能通过集合的方式增删元素
                i.remove();       //删：删除next()所获取元素
            }
        }
        System.out.println(c);//迭代器不改变c集合的元素
     }
}
